// 只出现一次的数字 III
/*给你一个整数数组 nums，其中恰好有两个元素只出现一次，其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。

你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题.
2 <= nums.length <= 3 * 104
-231 <= nums[i] <= 231 - 1
除两个只出现一次的整数外，nums 中的其他数字都出现两次*/
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* singleNumber(int* nums, int numsSize, int* returnSize) {
    int sum = 0;
    for (int i = 0; i < numsSize; i++) {
        sum ^= nums[i];
    }
    int count = 0;
    /*while (!(sum & (1 << count)))
        count++;
        */

  //  int new = 1 << count;
  int new=(sum == INT_MIN ? sum : sum & (-sum));
    int temp1 = 0;
    int temp2 = 0;
    for (int i = 0; i < numsSize; i++) {
        if (nums[i] & new) {
            temp1 ^= nums[i];
        } else {
            temp2 ^= nums[i];
        }
    }
    *returnSize = 2;
    int* arr = (int*)malloc(sizeof(int) * 2);
    arr[0] = temp1;
    arr[1] = temp2;
    return arr;
}